Amazon Linuxで起動スクリプトが動かなかったときのメモ
はじめに
パネポン対戦者絶賛募集中の横山です。
本日は起動スクリプトで嵌った時のメモです。
検証していたOSはAmazon Linux 2014.09です。
発端
「https://github.com/treasure-data/omnibus-td-agent」こちらのインストール手順まとめてました。 t2.microだとメモリ不足でt2.small以上じゃないとビルド出来ないなーと思いつつ、rpmの作成までいき、rpmを使いインストールしました。
あとは、起動&停止確認したらまとめよう!と思ったら…
$ sudo service td-agent start $
…はて?いつもなら [ OK ] もしくは [ FAILED ] の文字が出るのに何も出ない…どういうことだ?
調査
とりあえずshell bangに #!/bin/bash -xv を入れて起動すると、
$ sudo service td-agent start #!/bin/bash -xv # # /etc/rc.d/init.d/td-agent # # chkconfig: - 80 20 # description: td-agent # processname: td-agent # pidfile: /var/run/td-agent/td-agent.pid # ### BEGIN INIT INFO # Provides: td-agent # Default-Stop: 0 1 6 # Required-Start: $local_fs # Required-Stop: $local_fs # Short-Description: td-agent's init script # Description: td-agent is a data collector ### END INIT INFO set -e + set -e # Source function library. . /etc/init.d/functions + . /etc/init.d/functions # -*-Shell-script-*- # # functions This file contains functions to be used by most or all # shell scripts in the /etc/init.d directory. # TEXTDOMAIN=initscripts ++ TEXTDOMAIN=initscripts # Make sure umask is sane umask 022 ++ umask 022 # Set up a default search path. PATH="/sbin:/usr/sbin:/bin:/usr/bin" ++ PATH=/sbin:/usr/sbin:/bin:/usr/bin export PATH ++ export PATH # Get a sane screen width [ -z "${COLUMNS:-}" ] && COLUMNS=80 ++ '[' -z '' ']' ++ COLUMNS=80 [ -z "${CONSOLETYPE:-}" ] && CONSOLETYPE="$(/sbin/consoletype)" ++ '[' -z '' ']' /sbin/consoletype)" /sbin/consoletype) /sbin/consoletype +++ /sbin/consoletype ++ CONSOLETYPE=pty
[ -z "${CONSOLETYPE:-}" ] && CONSOLETYPE="`/sbin/consoletype`"
で止まってることがわかりました。
でも同様に /etc/init.d/functions を使ってる、httpdの起動スクリプトは正常に起動できることが確認出来ました。
そこで2つの起動スクリプトのdiffを取ってみると
set -e
このコマンド、exit codeが0以外ですとスクリプト途中で止めてくれるものらしいです。
ここで先ほど止まったコマンドのexit codeを調べてみると…
$ /sbin/consoletype pty $ echo $? 2
となるので、ご親切に set -e の機能でシェルの実行を途中止めているみたいです。
とりあえず、 set -e をコメントアウトして実行したらサービスの起動を確認出来ました。
まとめ
起動スクリプトが動かない原因もそうですが、コマンドとして set -eがあることを初めて知りました。
RedHatやCentOSで起動するのに、Amazon Linuxでは起動しないとかある場合、もしかしたらこれが原因かも知れません。